package com.hjqjl.mvvmdemo.net;

import com.blankj.utilcode.util.ToastUtils;

import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public abstract class BaseObserver<T> implements Observer<T> {

    @Override
    public void onSubscribe(Disposable d) {
        onStart(d);
    }

    @Override
    public void onNext(T response) {
        try {
            onSuccess(response);
        } catch (Exception e) {
            e.printStackTrace();
            ToastUtils.showShort("数据解析失败");
        }
    }

    @Override
    public void onError(Throwable e) {
        try {
            e.printStackTrace();

            onFailure(e);
            onFinish();
        } catch (Exception e1) {
            e1.printStackTrace();
            ToastUtils.showShort("请求网络失败");
        }

    }

    @Override
    public void onComplete() {
        onFinish();
    }

    /**
     * 网络请求开始
     */
    public void onStart(Disposable d) {
    }

    /**
     * 请网络请求成功返回值正确
     *
     * @param model 返回值
     */
    public abstract void onSuccess(T model);

    /**
     * 网络请求失败
     */
    public void onFailure(Throwable e) {
    }

    /**
     * 网络请求完成（包括成功和失败）
     */
    public void onFinish() {
    }
}
